package com.jvup.gameshow.controller;

import android.view.View;

import androidx.annotation.NonNull;

import com.jvup.common.basic.ObjectUtil;
import com.jvup.common.basic.StringUtil;
import com.jvup.common.concurrent.Scheduler;
import com.jvup.common.concurrent.ThreadUtil;
import com.jvup.common.support.base.BaseViewModel;
import com.jvup.common.support.base.EventController;
import com.jvup.common.utils.FileManager;
import com.jvup.gameshow.activity.SystemSetupActivity;
import com.jvup.gameshow.model.viewModel.ISystemSetupViewModel;

public class SystemSetupController extends EventController<SystemSetupActivity> {

    private ISystemSetupViewModel viewModel;

    public SystemSetupController(@NonNull SystemSetupActivity owner) {
        super(owner);
    }

    @Override
    protected void bindView() {
        owner.viewDataBinder().setSystemSetupController(this);
    }

    @Override
    protected void onCleared() {
        super.onCleared();
        this.viewModel = null;
    }

    public void onAddition(ISystemSetupViewModel viewModel) {
        this.viewModel = viewModel;
    }

    /*************************************************************************************************************************/

    /** 退出按钮事件响应 */
    public void backBtnOnClick(View view){
        owner.onBackPressed();
    }

    private volatile boolean isClearing = false;
    /** 清除缓存按钮事件响应 */
    public void clearCacheBtnOnClick(View view) {
        if(isClearing) {
            return;
        }

        changeClearState(true);
        // 注意 postDelayed 是向handle消息队列投递消息处理，固即便是 Activity 退出 View 被销毁，这个消息任务依旧会被主 handle 执行。
        // 可以考虑使用 view.removeCallbacks(Runnable) 来删除，取消任务
        view.postDelayed(() -> changeClearState(false), 4000);

//        ThreadUtil.once()
//                .andThen(v -> FileManager.clearImageDiskCache())
//                .schedulerBy(Scheduler.Main)
//                .andThen(v -> viewModel.setCacheCapacityHint(StringUtil.formatStorageSize(FileManager.countGlideCacheSize())))
//                .accept();
    }

    /**
     * 改变清理状态，改方法
     * @param isClearing true 清理中， false 空闲
     */
    private void changeClearState(boolean isClearing) {
        this.isClearing = isClearing;
        if(ObjectUtil.nonNull(viewModel)) {
            // 这个方法由于使用了 view.postDelayed 来延时处理，固可能在执行到这里时 Activity 已经销毁,
            // 作为严谨回收考虑，在 {@link onCleared} 中会回收ViewModel，可能引起这里空指针异常，固做判空处理。
            viewModel.setClearCacheClickable(!isClearing);
        }
    }


    /** 隐私条款按钮单击事件 */
    public void userAgreementBtnOnClick(View view) {
//        AntsRouter.ROUTER.<FloorCard>buildCard(Navigation.Page.WebPage)
//                .withData("title", "隐私条款")
//                .withData("url", Url.privacyPolicy_url)
//                .navigation();
//        DeviceConfigInfo.savePrivacyProtocolVer();
    }


    /** 服务条款按钮单击事件 */
    public void serviceAgreementBtnOnClick(View view) {
//        AntsRouter.ROUTER.<FloorCard>buildCard(Navigation.Page.WebPage)
//                .withData("title", "服务条款")
//                .withData("url", Url.serviceTerms_url)
//                .navigation();
//        DeviceConfigInfo.saveServiceProtocolVer();
    }

    /** 退出或登录按钮单击事件 */
    public void logoutBtnOnClick(View view) {
//        if(LoginRouter.ROUTER.checkLoginRouteIfNeed()) {
//            return;
//        }
//
//        if(TeensModeManage.teensModeEnable()) {
//            new TeensPasswordAuthorizeDialog(owner, TeensModeScene.Logout, this::onLogout).show();
//        } else {
//            onLogout();
//        }
    }

}
